@dxos/react-ui-editor 0.6.12-staging.e11e696 → 0.6.13-main.041e8aa
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/lib/browser/{chunk-AZWYO7TE.mjs → chunk-CIQSMP7K.mjs} +3 -3
- package/dist/lib/browser/{chunk-AZWYO7TE.mjs.map → chunk-CIQSMP7K.mjs.map} +2 -2
- package/dist/lib/browser/index.mjs +80 -81
- package/dist/lib/browser/index.mjs.map +4 -4
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/browser/state/index.mjs +1 -1
- package/dist/lib/node/{chunk-5RSKGJRI.cjs → chunk-GZWIENFM.cjs} +6 -6
- package/dist/lib/node/{chunk-5RSKGJRI.cjs.map → chunk-GZWIENFM.cjs.map} +2 -2
- package/dist/lib/node/index.cjs +108 -108
- package/dist/lib/node/index.cjs.map +4 -4
- package/dist/lib/node/meta.json +1 -1
- package/dist/lib/node/state/index.cjs +7 -7
- package/dist/lib/node/state/index.cjs.map +1 -1
- package/dist/lib/node-esm/{chunk-RCIWLRIY.mjs → chunk-GP5RCZ3X.mjs} +3 -3
- package/dist/lib/node-esm/{chunk-RCIWLRIY.mjs.map → chunk-GP5RCZ3X.mjs.map} +2 -2
- package/dist/lib/node-esm/index.mjs +80 -81
- package/dist/lib/node-esm/index.mjs.map +4 -4
- package/dist/lib/node-esm/meta.json +1 -1
- package/dist/lib/node-esm/state/index.mjs +1 -1
- package/dist/types/src/extensions/comments.d.ts.map +1 -1
- package/dist/types/src/extensions/listener.d.ts +1 -0
- package/dist/types/src/extensions/listener.d.ts.map +1 -1
- package/dist/types/src/hooks/useTextEditor.d.ts.map +1 -1
- package/dist/types/src/state/state.d.ts +2 -2
- package/dist/types/src/state/state.d.ts.map +1 -1
- package/dist/types/src/util.d.ts +6 -0
- package/dist/types/src/util.d.ts.map +1 -1
- package/package.json +28 -24
- package/src/extensions/command/hint.ts +1 -1
- package/src/extensions/comments.ts +7 -2
- package/src/extensions/listener.ts +1 -0
- package/src/hooks/useTextEditor.ts +28 -30
- package/src/state/state.ts +6 -3
- package/src/util.ts +10 -0
@@ -80,7 +80,7 @@ var localStorageStateStoreAdapter = {
|
|
80
80
|
localStorage.setItem(`${keyPrefix}/${id}`, JSON.stringify(state2));
|
81
81
|
}
|
82
82
|
};
|
83
|
-
var createEditorStateTransaction = ({ scrollTo, selection }) => {
|
83
|
+
var createEditorStateTransaction = (state2, { scrollTo, selection }) => {
|
84
84
|
return {
|
85
85
|
selection,
|
86
86
|
scrollIntoView: !scrollTo,
|
@@ -128,7 +128,7 @@ var state = ({ getState, setState } = {}) => {
|
|
128
128
|
run: (view) => {
|
129
129
|
const state2 = getState(view.state.facet(documentId));
|
130
130
|
if (state2) {
|
131
|
-
view.dispatch(createEditorStateTransaction(state2));
|
131
|
+
view.dispatch(createEditorStateTransaction(view.state, state2));
|
132
132
|
}
|
133
133
|
return true;
|
134
134
|
}
|
@@ -145,4 +145,4 @@ export {
|
|
145
145
|
createEditorStateTransaction,
|
146
146
|
state
|
147
147
|
};
|
148
|
-
//# sourceMappingURL=chunk-
|
148
|
+
//# sourceMappingURL=chunk-CIQSMP7K.mjs.map
|
@@ -1,7 +1,7 @@
|
|
1
1
|
{
|
2
2
|
"version": 3,
|
3
3
|
"sources": ["../../../src/state/util.ts", "../../../src/state/cursor.ts", "../../../src/state/doc.ts", "../../../src/state/state.ts"],
|
4
|
-
"sourcesContent": ["//\n// Copyright 2024 DXOS.org\n//\n\nimport { Facet } from '@codemirror/state';\n\nexport const singleValueFacet = <I, O = I>(defaultValue?: O) =>\n Facet.define<I, O>({\n // Called immediately.\n combine: (providers) => {\n return (providers[0] ?? defaultValue) as O;\n },\n });\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { type EditorState } from '@codemirror/state';\n\nimport { type Range } from './types';\nimport { singleValueFacet } from './util';\n\n/**\n * Converts indexes into the text document into stable peer-independent cursors.\n *\n * See:\n * - https://automerge.org/automerge/api-docs/js/functions/next.getCursor.html\n * - https://github.com/yjs/yjs?tab=readme-ov-file#relative-positions\n *\n * @param {assoc} number Negative values will associate the cursor with the previous character\n * while positive - with the next one.\n */\nexport interface CursorConverter {\n toCursor(position: number, assoc?: -1 | 1 | undefined): string;\n fromCursor(cursor: string): number;\n}\n\nconst defaultCursorConverter: CursorConverter = {\n toCursor: (position) => position.toString(),\n fromCursor: (cursor) => parseInt(cursor),\n};\n\nexport class Cursor {\n static readonly converter = singleValueFacet(defaultCursorConverter);\n\n static readonly getCursorFromRange = (state: EditorState, range: Range) => {\n const cursorConverter = state.facet(Cursor.converter);\n\n const from = cursorConverter.toCursor(range.from);\n const to = cursorConverter.toCursor(range.to, -1);\n return [from, to].join(':');\n };\n\n static readonly getRangeFromCursor = (state: EditorState, cursor: string) => {\n const cursorConverter = state.facet(Cursor.converter);\n\n const parts = cursor.split(':');\n const from = cursorConverter.fromCursor(parts[0]);\n const to = cursorConverter.fromCursor(parts[1]);\n return from !== undefined && to !== undefined ? { from, to } : undefined;\n };\n}\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { singleValueFacet } from './util';\n\n/**\n * Currently edited document id as FQ string.\n */\nexport const documentId = singleValueFacet<string>();\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { type Extension, Transaction, type TransactionSpec } from '@codemirror/state';\nimport { EditorView, keymap } from '@codemirror/view';\n\nimport { debounce } from '@dxos/async';\nimport { invariant } from '@dxos/invariant';\nimport { isNotFalsy } from '@dxos/util';\n\nimport { documentId } from './doc';\n\nconst stateRestoreAnnotation = 'dxos.org/cm/state-restore';\n\nexport type EditorSelection = {\n anchor: number;\n head?: number;\n};\n\nexport type EditorSelectionState = {\n scrollTo?: number;\n selection?: EditorSelection;\n};\n\nexport type EditorStateOptions = {\n setState: (id: string, state: EditorSelectionState) => void;\n getState: (id: string) => EditorSelectionState | undefined;\n};\n\nconst keyPrefix = 'dxos.org/react-ui-editor/state';\nexport const localStorageStateStoreAdapter: EditorStateOptions = {\n getState: (id) => {\n invariant(id);\n const state = localStorage.getItem(`${keyPrefix}/${id}`);\n return state ? JSON.parse(state) : undefined;\n },\n\n setState: (id, state) => {\n invariant(id);\n localStorage.setItem(`${keyPrefix}/${id}`, JSON.stringify(state));\n },\n};\n\nexport const createEditorStateTransaction = ({ scrollTo, selection }: EditorSelectionState): TransactionSpec => {\n return {\n selection,\n scrollIntoView: !scrollTo,\n effects: scrollTo ? EditorView.scrollIntoView(scrollTo, { yMargin: 96 }) : undefined,\n annotations: Transaction.userEvent.of(stateRestoreAnnotation),\n };\n};\n\n/**\n * Track scrolling and selection state to be restored when switching to document.\n */\n// TODO(burdon): Rename.\nexport const state = ({ getState, setState }: Partial<EditorStateOptions> = {}): Extension => {\n const setStateDebounced = debounce(setState!, 1_000);\n\n return [\n // TODO(burdon): Track scrolling (currently only updates when cursor moves).\n // EditorView.domEventHandlers({\n // scroll: (event) => {\n // setStateDebounced(id, {});\n // },\n // }),\n EditorView.updateListener.of(({ view, transactions }) => {\n const id = view.state.facet(documentId);\n if (!id || transactions.some((tr) => tr.isUserEvent(stateRestoreAnnotation))) {\n return;\n }\n\n if (setState) {\n const { scrollTop } = view.scrollDOM;\n const pos = view.posAtCoords({ x: 0, y: scrollTop });\n if (pos !== null) {\n const { anchor, head } = view.state.selection.main;\n setStateDebounced(id, { scrollTo: pos, selection: { anchor, head } });\n }\n }\n }),\n getState &&\n keymap.of([\n {\n key: 'ctrl-r', // TODO(burdon): Setting to jump back to selection.\n run: (view) => {\n const state = getState(view.state.facet(documentId));\n if (state) {\n view.dispatch(createEditorStateTransaction(state));\n }\n return true;\n },\n },\n ]),\n ].filter(isNotFalsy);\n};\n"],
|
5
|
-
"mappings": ";AAIA,SAASA,aAAa;AAEf,IAAMC,mBAAmB,CAAWC,iBACzCC,MAAMC,OAAa;;EAEjBC,SAAS,CAACC,cAAAA;AACR,WAAQA,UAAU,CAAA,KAAMJ;EAC1B;AACF,CAAA;;;ACYF,IAAMK,yBAA0C;EAC9CC,UAAU,CAACC,aAAaA,SAASC,SAAQ;EACzCC,YAAY,CAACC,WAAWC,SAASD,MAAAA;AACnC;AAEO,IAAME,SAAN,MAAMA,QAAAA;EACX;SAAgBC,YAAYC,iBAAiBT,sBAAAA;;EAE7C;SAAgBU,qBAAqB,CAACC,QAAoBC,UAAAA;AACxD,YAAMC,kBAAkBF,OAAMG,MAAMP,QAAOC,SAAS;AAEpD,YAAMO,OAAOF,gBAAgBZ,SAASW,MAAMG,IAAI;AAChD,YAAMC,KAAKH,gBAAgBZ,SAASW,MAAMI,IAAI,EAAC;AAC/C,aAAO;QAACD;QAAMC;QAAIC,KAAK,GAAA;IACzB;;EAEA;SAAgBC,qBAAqB,CAACP,QAAoBN,WAAAA;AACxD,YAAMQ,kBAAkBF,OAAMG,MAAMP,QAAOC,SAAS;AAEpD,YAAMW,QAAQd,OAAOe,MAAM,GAAA;AAC3B,YAAML,OAAOF,gBAAgBT,WAAWe,MAAM,CAAA,CAAE;AAChD,YAAMH,KAAKH,gBAAgBT,WAAWe,MAAM,CAAA,CAAE;AAC9C,aAAOJ,SAASM,UAAaL,OAAOK,SAAY;QAAEN;QAAMC;MAAG,IAAIK;IACjE;;AACF;;;ACvCO,IAAMC,aAAaC,iBAAAA;;;ACL1B,
|
4
|
+
"sourcesContent": ["//\n// Copyright 2024 DXOS.org\n//\n\nimport { Facet } from '@codemirror/state';\n\nexport const singleValueFacet = <I, O = I>(defaultValue?: O) =>\n Facet.define<I, O>({\n // Called immediately.\n combine: (providers) => {\n return (providers[0] ?? defaultValue) as O;\n },\n });\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { type EditorState } from '@codemirror/state';\n\nimport { type Range } from './types';\nimport { singleValueFacet } from './util';\n\n/**\n * Converts indexes into the text document into stable peer-independent cursors.\n *\n * See:\n * - https://automerge.org/automerge/api-docs/js/functions/next.getCursor.html\n * - https://github.com/yjs/yjs?tab=readme-ov-file#relative-positions\n *\n * @param {assoc} number Negative values will associate the cursor with the previous character\n * while positive - with the next one.\n */\nexport interface CursorConverter {\n toCursor(position: number, assoc?: -1 | 1 | undefined): string;\n fromCursor(cursor: string): number;\n}\n\nconst defaultCursorConverter: CursorConverter = {\n toCursor: (position) => position.toString(),\n fromCursor: (cursor) => parseInt(cursor),\n};\n\nexport class Cursor {\n static readonly converter = singleValueFacet(defaultCursorConverter);\n\n static readonly getCursorFromRange = (state: EditorState, range: Range) => {\n const cursorConverter = state.facet(Cursor.converter);\n\n const from = cursorConverter.toCursor(range.from);\n const to = cursorConverter.toCursor(range.to, -1);\n return [from, to].join(':');\n };\n\n static readonly getRangeFromCursor = (state: EditorState, cursor: string) => {\n const cursorConverter = state.facet(Cursor.converter);\n\n const parts = cursor.split(':');\n const from = cursorConverter.fromCursor(parts[0]);\n const to = cursorConverter.fromCursor(parts[1]);\n return from !== undefined && to !== undefined ? { from, to } : undefined;\n };\n}\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { singleValueFacet } from './util';\n\n/**\n * Currently edited document id as FQ string.\n */\nexport const documentId = singleValueFacet<string>();\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { type EditorState, type Extension, Transaction, type TransactionSpec } from '@codemirror/state';\nimport { EditorView, keymap } from '@codemirror/view';\n\nimport { debounce } from '@dxos/async';\nimport { invariant } from '@dxos/invariant';\nimport { isNotFalsy } from '@dxos/util';\n\nimport { documentId } from './doc';\n\nconst stateRestoreAnnotation = 'dxos.org/cm/state-restore';\n\nexport type EditorSelection = {\n anchor: number;\n head?: number;\n};\n\nexport type EditorSelectionState = {\n scrollTo?: number;\n selection?: EditorSelection;\n};\n\nexport type EditorStateOptions = {\n setState: (id: string, state: EditorSelectionState) => void;\n getState: (id: string) => EditorSelectionState | undefined;\n};\n\nconst keyPrefix = 'dxos.org/react-ui-editor/state';\nexport const localStorageStateStoreAdapter: EditorStateOptions = {\n getState: (id) => {\n invariant(id);\n const state = localStorage.getItem(`${keyPrefix}/${id}`);\n return state ? JSON.parse(state) : undefined;\n },\n\n setState: (id, state) => {\n invariant(id);\n localStorage.setItem(`${keyPrefix}/${id}`, JSON.stringify(state));\n },\n};\n\nexport const createEditorStateTransaction = (\n state: EditorState,\n { scrollTo, selection }: EditorSelectionState,\n): TransactionSpec => {\n return {\n selection,\n scrollIntoView: !scrollTo,\n effects: scrollTo ? EditorView.scrollIntoView(scrollTo, { yMargin: 96 }) : undefined,\n annotations: Transaction.userEvent.of(stateRestoreAnnotation),\n };\n};\n\n/**\n * Track scrolling and selection state to be restored when switching to document.\n */\n// TODO(burdon): Rename.\nexport const state = ({ getState, setState }: Partial<EditorStateOptions> = {}): Extension => {\n const setStateDebounced = debounce(setState!, 1_000);\n\n return [\n // TODO(burdon): Track scrolling (currently only updates when cursor moves).\n // EditorView.domEventHandlers({\n // scroll: (event) => {\n // setStateDebounced(id, {});\n // },\n // }),\n EditorView.updateListener.of(({ view, transactions }) => {\n const id = view.state.facet(documentId);\n if (!id || transactions.some((tr) => tr.isUserEvent(stateRestoreAnnotation))) {\n return;\n }\n\n if (setState) {\n const { scrollTop } = view.scrollDOM;\n const pos = view.posAtCoords({ x: 0, y: scrollTop });\n if (pos !== null) {\n const { anchor, head } = view.state.selection.main;\n setStateDebounced(id, { scrollTo: pos, selection: { anchor, head } });\n }\n }\n }),\n getState &&\n keymap.of([\n {\n key: 'ctrl-r', // TODO(burdon): Setting to jump back to selection.\n run: (view) => {\n const state = getState(view.state.facet(documentId));\n if (state) {\n view.dispatch(createEditorStateTransaction(view.state, state));\n }\n return true;\n },\n },\n ]),\n ].filter(isNotFalsy);\n};\n"],
|
5
|
+
"mappings": "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",
|
6
6
|
"names": ["Facet", "singleValueFacet", "defaultValue", "Facet", "define", "combine", "providers", "defaultCursorConverter", "toCursor", "position", "toString", "fromCursor", "cursor", "parseInt", "Cursor", "converter", "singleValueFacet", "getCursorFromRange", "state", "range", "cursorConverter", "facet", "from", "to", "join", "getRangeFromCursor", "parts", "split", "undefined", "documentId", "singleValueFacet", "Transaction", "EditorView", "keymap", "debounce", "invariant", "isNotFalsy", "stateRestoreAnnotation", "keyPrefix", "localStorageStateStoreAdapter", "getState", "id", "invariant", "state", "localStorage", "getItem", "JSON", "parse", "undefined", "setState", "setItem", "stringify", "createEditorStateTransaction", "scrollTo", "selection", "scrollIntoView", "effects", "EditorView", "yMargin", "annotations", "Transaction", "userEvent", "of", "setStateDebounced", "debounce", "updateListener", "view", "transactions", "facet", "documentId", "some", "tr", "isUserEvent", "scrollTop", "scrollDOM", "pos", "posAtCoords", "x", "y", "anchor", "head", "main", "keymap", "key", "run", "dispatch", "filter", "isNotFalsy"]
|
7
7
|
}
|
@@ -5,7 +5,7 @@ import {
|
|
5
5
|
localStorageStateStoreAdapter,
|
6
6
|
singleValueFacet,
|
7
7
|
state
|
8
|
-
} from "./chunk-
|
8
|
+
} from "./chunk-CIQSMP7K.mjs";
|
9
9
|
|
10
10
|
// packages/ui/react-ui-editor/src/translations.ts
|
11
11
|
var translationKey = "react-ui-editor";
|
@@ -1237,6 +1237,51 @@ var clientRectsFor = (dom) => {
|
|
1237
1237
|
}
|
1238
1238
|
};
|
1239
1239
|
|
1240
|
+
// packages/ui/react-ui-editor/src/extensions/util/error.ts
|
1241
|
+
import { log as log3 } from "@dxos/log";
|
1242
|
+
var __dxlog_file5 = "/home/runner/work/dxos/dxos/packages/ui/react-ui-editor/src/extensions/util/error.ts";
|
1243
|
+
var wrapWithCatch = (fn) => {
|
1244
|
+
return (...args) => {
|
1245
|
+
try {
|
1246
|
+
return fn(...args);
|
1247
|
+
} catch (err) {
|
1248
|
+
log3.catch(err, void 0, {
|
1249
|
+
F: __dxlog_file5,
|
1250
|
+
L: 12,
|
1251
|
+
S: void 0,
|
1252
|
+
C: (f, a) => f(...a)
|
1253
|
+
});
|
1254
|
+
}
|
1255
|
+
};
|
1256
|
+
};
|
1257
|
+
|
1258
|
+
// packages/ui/react-ui-editor/src/extensions/util/overlap.ts
|
1259
|
+
var overlap = (a, b) => a.from <= b.to && a.to >= b.from;
|
1260
|
+
|
1261
|
+
// packages/ui/react-ui-editor/src/extensions/util/react.tsx
|
1262
|
+
import React from "react";
|
1263
|
+
import { createRoot } from "react-dom/client";
|
1264
|
+
import { ThemeProvider } from "@dxos/react-ui";
|
1265
|
+
import { defaultTx } from "@dxos/react-ui-theme";
|
1266
|
+
var createElement = (tag, options, children) => {
|
1267
|
+
const el = document.createElement(tag);
|
1268
|
+
if (options?.className) {
|
1269
|
+
el.className = options.className;
|
1270
|
+
}
|
1271
|
+
if (children) {
|
1272
|
+
el.append(...Array.isArray(children) ? children : [
|
1273
|
+
children
|
1274
|
+
]);
|
1275
|
+
}
|
1276
|
+
return el;
|
1277
|
+
};
|
1278
|
+
var renderRoot = (root, node) => {
|
1279
|
+
createRoot(root).render(/* @__PURE__ */ React.createElement(ThemeProvider, {
|
1280
|
+
tx: defaultTx
|
1281
|
+
}, node));
|
1282
|
+
return root;
|
1283
|
+
};
|
1284
|
+
|
1240
1285
|
// packages/ui/react-ui-editor/src/extensions/command/hint.ts
|
1241
1286
|
var CommandHint = class extends WidgetType2 {
|
1242
1287
|
constructor(content) {
|
@@ -1327,51 +1372,6 @@ import { debounce } from "@dxos/async";
|
|
1327
1372
|
import { log as log5 } from "@dxos/log";
|
1328
1373
|
import { nonNullable } from "@dxos/util";
|
1329
1374
|
|
1330
|
-
// packages/ui/react-ui-editor/src/extensions/util/error.ts
|
1331
|
-
import { log as log3 } from "@dxos/log";
|
1332
|
-
var __dxlog_file5 = "/home/runner/work/dxos/dxos/packages/ui/react-ui-editor/src/extensions/util/error.ts";
|
1333
|
-
var wrapWithCatch = (fn) => {
|
1334
|
-
return (...args) => {
|
1335
|
-
try {
|
1336
|
-
return fn(...args);
|
1337
|
-
} catch (err) {
|
1338
|
-
log3.catch(err, void 0, {
|
1339
|
-
F: __dxlog_file5,
|
1340
|
-
L: 12,
|
1341
|
-
S: void 0,
|
1342
|
-
C: (f, a) => f(...a)
|
1343
|
-
});
|
1344
|
-
}
|
1345
|
-
};
|
1346
|
-
};
|
1347
|
-
|
1348
|
-
// packages/ui/react-ui-editor/src/extensions/util/overlap.ts
|
1349
|
-
var overlap = (a, b) => a.from <= b.to && a.to >= b.from;
|
1350
|
-
|
1351
|
-
// packages/ui/react-ui-editor/src/extensions/util/react.tsx
|
1352
|
-
import React from "react";
|
1353
|
-
import { createRoot } from "react-dom/client";
|
1354
|
-
import { ThemeProvider } from "@dxos/react-ui";
|
1355
|
-
import { defaultTx } from "@dxos/react-ui-theme";
|
1356
|
-
var createElement = (tag, options, children) => {
|
1357
|
-
const el = document.createElement(tag);
|
1358
|
-
if (options?.className) {
|
1359
|
-
el.className = options.className;
|
1360
|
-
}
|
1361
|
-
if (children) {
|
1362
|
-
el.append(...Array.isArray(children) ? children : [
|
1363
|
-
children
|
1364
|
-
]);
|
1365
|
-
}
|
1366
|
-
return el;
|
1367
|
-
};
|
1368
|
-
var renderRoot = (root, node) => {
|
1369
|
-
createRoot(root).render(/* @__PURE__ */ React.createElement(ThemeProvider, {
|
1370
|
-
tx: defaultTx
|
1371
|
-
}, node));
|
1372
|
-
return root;
|
1373
|
-
};
|
1374
|
-
|
1375
1375
|
// packages/ui/react-ui-editor/src/util.ts
|
1376
1376
|
import { log as log4 } from "@dxos/log";
|
1377
1377
|
var __dxlog_file6 = "/home/runner/work/dxos/dxos/packages/ui/react-ui-editor/src/util.ts";
|
@@ -1381,12 +1381,16 @@ var callbackWrapper = (fn) => (...args) => {
|
|
1381
1381
|
} catch (err) {
|
1382
1382
|
log4.catch(err, void 0, {
|
1383
1383
|
F: __dxlog_file6,
|
1384
|
-
L:
|
1384
|
+
L: 19,
|
1385
1385
|
S: void 0,
|
1386
1386
|
C: (f, a) => f(...a)
|
1387
1387
|
});
|
1388
1388
|
}
|
1389
1389
|
};
|
1390
|
+
var debugDispatcher = (trs, view) => {
|
1391
|
+
logChanges(trs);
|
1392
|
+
view.update(trs);
|
1393
|
+
};
|
1390
1394
|
var logChanges = (trs) => {
|
1391
1395
|
const changes = trs.flatMap((tr) => {
|
1392
1396
|
if (tr.changes.empty) {
|
@@ -1407,7 +1411,7 @@ var logChanges = (trs) => {
|
|
1407
1411
|
changes
|
1408
1412
|
}, {
|
1409
1413
|
F: __dxlog_file6,
|
1410
|
-
L:
|
1414
|
+
L: 49,
|
1411
1415
|
S: void 0,
|
1412
1416
|
C: (f, a) => f(...a)
|
1413
1417
|
});
|
@@ -1799,8 +1803,11 @@ var scrollThreadIntoView = (view, id, center = true) => {
|
|
1799
1803
|
}
|
1800
1804
|
};
|
1801
1805
|
var selectionOverlapsComment = (state2) => {
|
1806
|
+
const commentState = state2.field(commentsState, false);
|
1807
|
+
if (commentState === void 0) {
|
1808
|
+
return false;
|
1809
|
+
}
|
1802
1810
|
const { selection } = state2;
|
1803
|
-
const commentState = state2.field(commentsState);
|
1804
1811
|
for (const range of selection.ranges) {
|
1805
1812
|
if (commentState.comments.some(({ range: commentRange }) => overlap(commentRange, range))) {
|
1806
1813
|
return true;
|
@@ -5232,7 +5239,6 @@ var instanceCount = 0;
|
|
5232
5239
|
var useTextEditor = (props = {}, deps = []) => {
|
5233
5240
|
const { id, initialValue, extensions, autoFocus, scrollTo, selection, moveToEndOfLine, debug } = useMemo3(() => getProviderValue(props), deps ?? []);
|
5234
5241
|
const [instanceId] = useState4(() => `text-editor-${++instanceCount}`);
|
5235
|
-
const onUpdate = useRef2();
|
5236
5242
|
const [view, setView] = useState4();
|
5237
5243
|
const parentRef = useRef2(null);
|
5238
5244
|
useEffect3(() => {
|
@@ -5244,7 +5250,7 @@ var useTextEditor = (props = {}, deps = []) => {
|
|
5244
5250
|
doc: initialValue?.length ?? 0
|
5245
5251
|
}, {
|
5246
5252
|
F: __dxlog_file11,
|
5247
|
-
L:
|
5253
|
+
L: 76,
|
5248
5254
|
S: void 0,
|
5249
5255
|
C: (f, a) => f(...a)
|
5250
5256
|
});
|
@@ -5265,42 +5271,35 @@ var useTextEditor = (props = {}, deps = []) => {
|
|
5265
5271
|
selection: initialSelection,
|
5266
5272
|
extensions: [
|
5267
5273
|
id && documentId.of(id),
|
5268
|
-
|
5274
|
+
extensions,
|
5275
|
+
// NOTE: This doesn't catch errors in keymap functions.
|
5269
5276
|
EditorView18.exceptionSink.of((err) => {
|
5270
5277
|
log8.catch(err, void 0, {
|
5271
5278
|
F: __dxlog_file11,
|
5272
|
-
L:
|
5279
|
+
L: 98,
|
5273
5280
|
S: void 0,
|
5274
5281
|
C: (f, a) => f(...a)
|
5275
5282
|
});
|
5276
|
-
}),
|
5277
|
-
extensions,
|
5278
|
-
EditorView18.updateListener.of(() => {
|
5279
|
-
setTimeout(() => {
|
5280
|
-
onUpdate.current?.();
|
5281
|
-
});
|
5282
5283
|
})
|
5283
5284
|
].filter(isNotFalsy3)
|
5284
5285
|
});
|
5285
5286
|
view2 = new EditorView18({
|
5286
5287
|
parent: parentRef.current,
|
5287
5288
|
state: state2,
|
5288
|
-
|
5289
|
-
|
5290
|
-
|
5291
|
-
|
5292
|
-
logChanges(trs);
|
5293
|
-
}
|
5294
|
-
view3.update(trs);
|
5295
|
-
}
|
5289
|
+
scrollTo: scrollTo ? EditorView18.scrollIntoView(scrollTo, {
|
5290
|
+
yMargin: 96
|
5291
|
+
}) : void 0,
|
5292
|
+
dispatchTransactions: debug ? debugDispatcher : void 0
|
5296
5293
|
});
|
5297
|
-
if (
|
5294
|
+
if (moveToEndOfLine && !initialSelection) {
|
5298
5295
|
const { to } = view2.state.doc.lineAt(0);
|
5299
|
-
|
5300
|
-
|
5301
|
-
|
5302
|
-
|
5303
|
-
|
5296
|
+
if (to) {
|
5297
|
+
view2.dispatch({
|
5298
|
+
selection: {
|
5299
|
+
anchor: to
|
5300
|
+
}
|
5301
|
+
});
|
5302
|
+
}
|
5304
5303
|
}
|
5305
5304
|
setView(view2);
|
5306
5305
|
}
|
@@ -5318,21 +5317,20 @@ var useTextEditor = (props = {}, deps = []) => {
|
|
5318
5317
|
}, deps);
|
5319
5318
|
useEffect3(() => {
|
5320
5319
|
if (view) {
|
5321
|
-
|
5322
|
-
|
5323
|
-
|
5320
|
+
if (view.state.facet(editorInputMode).noTabster) {
|
5321
|
+
parentRef.current?.removeAttribute("data-tabster");
|
5322
|
+
}
|
5323
|
+
if (scrollTo || selection) {
|
5324
|
+
view.dispatch(createEditorStateTransaction(view.state, {
|
5324
5325
|
scrollTo,
|
5325
5326
|
selection
|
5326
5327
|
}));
|
5327
|
-
};
|
5328
|
-
if (view.state.facet(editorInputMode).noTabster) {
|
5329
|
-
parentRef.current?.removeAttribute("data-tabster");
|
5330
5328
|
}
|
5331
5329
|
}
|
5332
5330
|
}, [
|
5333
5331
|
view,
|
5334
|
-
|
5335
|
-
|
5332
|
+
scrollTo,
|
5333
|
+
selection
|
5336
5334
|
]);
|
5337
5335
|
useEffect3(() => {
|
5338
5336
|
if (view && autoFocus) {
|
@@ -5403,6 +5401,7 @@ export {
|
|
5403
5401
|
createExternalCommentSync,
|
5404
5402
|
createMarkdownExtensions,
|
5405
5403
|
createThemeExtensions,
|
5404
|
+
debugDispatcher,
|
5406
5405
|
debugNodeLogger,
|
5407
5406
|
debugTree,
|
5408
5407
|
decorateMarkdown,
|